// control.js

let isProcessing = false;  // 防抖变量

// 导入 capture.js 模块中的 captureAndUploadImage 拍照并上传图片 函数
import { captureAndUploadImage } from './capture.js';

// 导入通用的 addLog 添加日志 函数
import { addLog } from './log.js';

// 控制防抖逻辑
function setProcessingState(state) {
    isProcessing = state;
}

// 通过回调函数来恢复防抖状态
function recoverProcessingState() {
    setProcessingState(false);  // 捕获并恢复防抖变量
}

// 设置拍照按钮事件
function setupStartButton() {
    try {
        // 拍照按钮相关功能
        $('#shutter-button').on('pointerdown', async function () {
            // 防抖判断
            if (isProcessing) {
                addLog('已阻止再次点击')
                return
            }

            // 设置防抖状态为 true，表示正在处理
            setProcessingState(true);  

            // 倒计时动画
            const countdown = document.getElementById('countdown');
            countdown.textContent = '3';
            countdown.classList.add('countdown-animation');
            countdown_audio.play(); // 倒计时音效

            await new Promise(resolve => setTimeout(resolve, 1000));
            countdown.textContent = '2';
            countdown.classList.remove('countdown-animation');
            void countdown.offsetWidth; // 触发重排
            countdown.classList.add('countdown-animation');
            countdown_audio.play(); // 倒计时音效

            await new Promise(resolve => setTimeout(resolve, 1000));
            countdown.textContent = '1';
            countdown.classList.remove('countdown-animation');
            void countdown.offsetWidth; // 触发重排
            countdown.classList.add('countdown-animation');
            countdown_audio.play(); // 倒计时音效

            await new Promise(resolve => setTimeout(resolve, 1000));
            countdown.classList.remove('countdown-animation');

            // 拍照时动画
            setTimeout(() => {
                captureAndUploadImage(recoverProcessingState);  // 拍照命令，传入回调函数(做防抖)
                capture_audio.play();  // 播放拍照音效
                flashEffect();         // 添加闪光灯特效
                showSpinner();    // 添加加载动画
            }, 300);
        });

        // 拍照音效
        const capture_audio = new Audio('./assets/sound/capture.mp3');
        // 倒计时音效
        const countdown_audio = new Audio('./assets/sound/countdown.mp3');

    } catch (error) {
        console.log(error);
    }
}

// 创建闪光灯效果
function flashEffect() {
    // 使用 jQuery 获取摄像头容器
    const $cameraContainer = $('#camera-container');  

    if ($cameraContainer.length === 0) {
        console.error('未找到摄像头容器');
        return;
    }

    // 创建一个闪光层
    const $flashLayer = $('<div></div>').addClass('flash-layer');

    // 将闪光层添加到容器中
    $cameraContainer.append($flashLayer);

    // 显示闪光层并在0.1秒后移除
    setTimeout(() => {
        $flashLayer.remove();  // 使用 jQuery 移除闪光层
    }, 200); // 闪光效果持续0.1秒
}

// 创建加载动画
function showSpinner() {
    // 使用 jQuery 获取摄像头容器
    const $cameraContainer = $('#camera-container');

    if ($cameraContainer.length === 0) {
        console.error('未找到摄像头容器');
        return;
    }

    // 创建新的 spinner HTML 结构
    const $spinner = $('<div class="spinner"></div>')
        .append('<div class="cube1"></div>')
        .append('<div class="cube2"></div>');

    // 将新的 spinner 添加到摄像头容器
    $cameraContainer.append($spinner);
}


// 导出 setupStartButton
export { setupStartButton };
